#include<iostream>
#include<vector>
#include<queue>
using namespace std;


namespace wjq
{
	template <class T>
	class cmp2
	{
	public:
		bool operator()(const T& d1, const T& d2)
		{
			return (d1._year < d2._year) ||
				(d1._year == d2._year && d1._month < d2._month) ||
				(d1._year == d2._year && d1._month == d2._month && d1._day < d2._day);
		}

	};
	template <class T>
	class cmp1
	{
	public:
		bool operator()(const T& d1, const T& d2)
		{
			return (d1._year > d2._year) ||
				(d1._year == d2._year && d1._month > d2._month) ||
				(d1._year == d2._year && d1._month == d2._month && d1._day > d2._day);
		}

	};
}
class Date
{
	friend ostream& operator<<(ostream& _cout, const Date& d);
	template <class T>
	friend class wjq::cmp1;
	template <class T>
	friend class wjq::cmp2;

public:
	Date(int year = 1900, int month = 1, int day = 1)
		: _year(year)
		, _month(month)
		, _day(day)
	{}

private:
	int _year;
	int _month;
	int _day;
};
ostream& operator<<(ostream& _cout, const Date& d)
{
	_cout << d._year << "-" << d._month << "-" << d._day;
	return _cout;
}
void TestPriorityQueue()
{
	// 大堆，需要用户在自定义类型中提供<的重载
	priority_queue<Date,vector<Date>,wjq::cmp1<Date>> q1;
	q1.push(Date(2018, 10, 29));
	q1.push(Date(2018, 10, 28));
	q1.push(Date(2018, 10, 30));
	cout << q1.top() << endl;
	// 如果要创建小堆，需要用户提供>的重载
	priority_queue<Date, vector<Date>, wjq::cmp2<Date>> q2;
	q2.push(Date(2018, 10, 29));
	q2.push(Date(2018, 10, 28));
	q2.push(Date(2018, 10, 30));
	cout << q2.top() << endl;
}
int a;
int main()
{
//	TestPriorityQueue();
    // Date d1(2018, 10, 29);
    // Date d2(2018, 10, 30);
    // cout << wjq::cmp1<Date>()(d1,d2);
    printf("%d",a);
    return 0;
}
